<template>
	<form-item-wrapper :designer="designer" :field="thisField" :rules="rules" :design-state="thisDesignState"
					   :parent-widget="thisParentWidget" :parent-list="thisParentList" :index-of-parent-list="thisIndexOfParentList" :style="field.options.customStyle"
					   :sub-form-row-index="thisSubFormRowIndex" :sub-form-col-index="thisSubFormColIndex" :sub-form-row-id="thisSubFormRowId">
		<el-input ref="fieldEditor" v-model="fieldModel"
				  :disabled="field.options.disabled" :readonly="thisField.options.readonly"
				  :size="widgetSize" class="hide-spin-button"
				  :type="inputType"
				  :show-password="thisField.options.showPassword"
				  :placeholder="thisField.options.placeholder"
				  :clearable="thisField.options.clearable"
				  :minlength="thisField.options.minLength" :maxlength="thisField.options.maxLength"
				  :show-word-limit="thisField.options.showWordLimit"
				  :prefix-icon="thisField.options.prefixIcon" :suffix-icon="thisField.options.suffixIcon"
				  @focus="handleFocusCustomEvent" @blur="handleBlurCustomEvent" @input="handleInputCustomEvent"
				  @change="handleChangeEvent">
			<template #append v-if="thisField.options.appendButton">
				<el-button :disabled="thisField.options.disabled || thisField.options.appendButtonDisabled"
						   @click="emitAppendButtonClick">
					<el-icon style="vertical-align: -0.15em;height: 1.1em;width: 1.1em">
						<component :is="thisField.options.buttonIcon" style="height: 1.1em;width: 1.1em"/>
					</el-icon>
				</el-button>
			</template>
		</el-input>
	</form-item-wrapper>
</template>

<script>
import FormItemWrapper from './form-item-wrapper'
import emitter from '@/utils/emitter'
import fieldMixin from "@/components/designer/form-designer/form-widget/field-widget/fieldMixin";

export default {
	name: "code-no-widget",
	componentName: 'FieldWidget',  //必须固定为FieldWidget，用于接收父级组件的broadcast事件
	mixins: [emitter, fieldMixin],
	props: {
		field: Object,
		parentWidget: Object,
		parentList: Array,
		indexOfParentList: Number,
		designer: Object,
		designState: {
			type: Boolean,
			default: false
		},
		subFormRowIndex: { /* 子表单组件行索引，从0开始计数 */
			type: Number,
			default: -1
		},
		subFormColIndex: { /* 子表单组件列索引，从0开始计数 */
			type: Number,
			default: -1
		},
		subFormRowId: { /* 子表单组件行Id，唯一id且不可变 */
			type: String,
			default: ''
		},
	},
	components: {
		FormItemWrapper,
	},
	data() {
		return {
			thisField: this.field,
			thisParentWidget: this.parentWidget,
			thisParentList:this.parentList,
			thisIndexOfParentList:this.indexOfParentList,
			thisDesignState:this.designState,
			thisSubFormRowIndex:this.subFormRowIndex,
			thisSubFormColIndex:this.subFormColIndex,
			thisSubFormRowId:this.subFormRowId,
			oldFieldValue: null, //field组件change之前的值
			fieldModel: null,
			rules: [],
		}
	},
	computed: {
		inputType() {
			if (this.thisField.options.type === 'number') {
				return 'text'  //当input的type设置为number时，如果输入非数字字符，则v-model拿到的值为空字符串，无法实现输入校验！故屏蔽之！！
			}
			return this.thisField.options.type
		},

	},
	beforeCreate() {
		/* 这里不能访问方法和属性！！ */
	},

	created() {
		/* 注意：子组件mounted在父组件created之后、父组件mounted之前触发，故子组件mounted需要用到的prop
		   需要在父组件created中初始化！！ */
		this.initFieldModel()
		this.registerToRefList()
		this.initEventHandler()
		this.buildFieldRules()

		this.handleOnCreated()
	},

	mounted() {
		this.handleOnMounted()
	},

	beforeUnmount() {
		this.unregisterFromRefList()
	},

	methods: {}
}
</script>

<style lang="scss" scoped>
@import "../../../../../assets/formdesigner/styles/global.scss"; /* form-item-wrapper已引入，还需要重复引入吗？ */

</style>
